#include"Energy.h"

using namespace std;
using namespace cv;

/**
* @brief:Run the energy     风车程序运行函数
* @param: cv::Mat& src     源图像的引用
* @return: NONE
*/

void Energy::run(cv::Mat& src) {
    clearAll();
    initImage(src);
    if (show_process)imshow("bin", src);

    if (findArmors(src) < 1)
		return;//寻找所有大风车装甲板
    if (show_energy) showArmors("armor", src);
    if (!findFlowStripFan(src)) {//寻找图中流动条所在的扇叶
        if (!findFlowStripWeak(src)) 
			return;
    }
    else {
        if (show_energy)showFlowStripFan("strip fan", src);
        if (!findTargetInFlowStripFan()) 
			return;//在流动条区域内寻找装甲板
        if (!findFlowStrip(src)) 
			return;//寻找流动条
    }
    if (show_energy) 
		showFlowStrip("strip", src);
    findCenterROI(src);//寻找R标范围(缩小R标检测范围，可提高检测速度，降低误识别率）
    
	if (!findCenterR(src)) 
		return;//寻找中心R
    if (show_energy) showCenterR("R", src);
    
	fans_cnt = findFans(src);//寻找图像中所有扇叶
   
	if (show_energy) showFans("fans", src);

    getTargetPolarAngle(); 
    if (energy_rotation_init) {
        initRotation();
        return;
    }
    getPredictPoint(target_point);
    if (show_energy) showPredictPoint("Predict", src);
    if (show_data) showData(target_point,predict_point,circle_center_point);
}
